#include "LED.h"
#include "gpio.h"
#include "cmsis_os.h"
#include "stm32f4xx.h"

void BinGe_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIO Ports Clock Enable */
    __HAL_RCC_GPIOG_CLK_ENABLE();
    __HAL_RCC_GPIOE_CLK_ENABLE();
    __HAL_RCC_GPIOF_CLK_ENABLE();

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(R_LED9_GPIO_Port, R_LED9_Pin, GPIO_PIN_SET);

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(R_LED10_GPIO_Port, R_LED10_Pin, GPIO_PIN_SET);

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(GPIOG, L_LED1_Pin|L_LED2_Pin|L_LED3_Pin|L_LED4_Pin
                      |L_LED5_Pin|L_LED6_Pin|L_LED7_Pin|L_LED8_Pin, GPIO_PIN_SET);

    /*Configure GPIO pins : PGPin PGPin PGPin PGPin
                             PGPin PGPin PGPin PGPin */
    GPIO_InitStruct.Pin = L_LED1_Pin|L_LED2_Pin|L_LED3_Pin|L_LED4_Pin
                          |L_LED5_Pin|L_LED6_Pin|L_LED7_Pin|L_LED8_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

    /*Configure GPIO pin : PtPin */
    GPIO_InitStruct.Pin = R_LED9_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(R_LED9_GPIO_Port, &GPIO_InitStruct);

    /*Configure GPIO pin : PtPin */
    GPIO_InitStruct.Pin = R_LED10_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(R_LED10_GPIO_Port, &GPIO_InitStruct);







}

void BinGe_FLASH(void)
{

//		uint32_t PreviousWakeTime=osKernelSysTick();
//		vTaskDelay(&PreviousWakeTime,FlashTime);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED8_Pin,open);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,close);
    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED6_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED6_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED7_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED7_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED8_Pin,open);
    //8

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED6_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED6_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED7_Pin,open);
    //7

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED6_Pin,open);
    //6

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED5_Pin,open);
    //5

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED4_Pin,open);
    //4

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED3_Pin,open);
    //3

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,close);

    HAL_GPIO_WritePin(GPIOG,L_LED2_Pin,open);
    //2

    HAL_GPIO_WritePin(GPIOG,L_LED1_Pin,open);


    //1
    HAL_GPIO_WritePin(GPIOG,L_LED8_Pin,close);
}

void R_LED_FLASH(void)
{
    uint32_t PreviousWakeTime=osKernelSysTick();
    HAL_GPIO_WritePin(R_LED10_GPIO_Port, R_LED10_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(R_LED9_GPIO_Port, R_LED9_Pin,open);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(R_LED10_GPIO_Port, R_LED10_Pin,close);
    vTaskDelay(FlashTime);
    HAL_GPIO_WritePin(R_LED9_GPIO_Port, R_LED9_Pin,close);
    vTaskDelay(FlashTime);
}

void L_LED_ON(void)
{
    uint32_t PreviousWakeTime=osKernelSysTick();
    HAL_GPIO_WritePin(GPIOG, L_LED1_Pin|L_LED2_Pin|L_LED3_Pin|L_LED4_Pin|L_LED5_Pin|L_LED6_Pin|L_LED7_Pin|L_LED8_Pin, open);
    vTaskDelay(FlashTime);
}

void L_LED_OFF(void)
{
    uint32_t PreviousWakeTime=osKernelSysTick();
    HAL_GPIO_WritePin(GPIOG, L_LED1_Pin|L_LED2_Pin|L_LED3_Pin|L_LED4_Pin|L_LED5_Pin|L_LED6_Pin|L_LED7_Pin|L_LED8_Pin, close);
    vTaskDelay(FlashTime);
}

void R_LED_ON(void)
{
    uint32_t PreviousWakeTime=osKernelSysTick();
    HAL_GPIO_WritePin(R_LED10_GPIO_Port, R_LED10_Pin,open);
    HAL_GPIO_WritePin(R_LED9_GPIO_Port, R_LED9_Pin,open);
    vTaskDelay(FlashTime);
}


void R_LED_OFF(void)
{
    uint32_t PreviousWakeTime=osKernelSysTick();
    HAL_GPIO_WritePin(R_LED10_GPIO_Port, R_LED10_Pin,close);
    HAL_GPIO_WritePin(R_LED9_GPIO_Port, R_LED9_Pin,close);
    vTaskDelay(FlashTime);
}







